<?php

class MY_URI extends CI_URI {
    
    private $modul_segments = array();
    private $other_segments = array();
    private $current = '';
    
    function __construct() {
        
        parent::CI_URI();
    }
    
    
    /**
     * Инициализация данных
     * @param string $current Текущий сегмент
     * @return void
     */
    public function initialize_modul_segments($current) {
        
        //Убираем сегмент ajax из общего массива
        if ($this->segment(1) == 'ajax') {
            
            $i = 1; $new = array();
            foreach($this->segments as $val) {
                
                if ($val != 'ajax') {
                
                    $new[$i] = $val; 
                    $i++;
                }
            }
            
            $this->segments = $new;
            define('IS_AJAX', true);
        }
        
        //Разбиваем сегменты на две части
        $is_find = true; $i = 1;
        foreach ($this->segment_array() as $key => $row) {

            if ($is_find) {
                
                $this->modul_segments[$key] = $row;
            }
            else {
                
                $this->other_segments[$i] = $row;
                $i++;
            }
            
            if ($row == $current) { $is_find = false; }
        }
        
        //Указываем активный сегмент
        $this->current = $current;
    }
    
    
    /**
     * Получение сегмента по номеру, относительно текущего
     * @param int $n Номер сегмента
     * @param mixed $def Значение по умолчанию
     * @return mixed
     */
    public function other_segment($n, $def = false) {
        
        return (isset($this->other_segments[$n])) ? $this->other_segments[$n] : $def;
    }
    
    
    /**
     * Вернуть массив сегментов до модуля
     * @return string
     */
    public function modul_segments_array() {
        
        return $this->modul_segments;
    }
    
    
    /**
     * Вернуть массив сегментов после модуля
     * @return string
     */
    public function other_segments_array() {
        
        return $this->other_segments;
    }
    
    
    /**
     * Создание ссылки модуля
     * @param string $uri URI ссылки
     * @param boolean $ajax Использовать AJAX ссылку или нет
     * @return string
     */
    public function modul_url($uri = '', $ajax = false) {
        
        if ($ajax || defined('IS_AJAX')) {
            
            $uri = 'ajax'.$this->modul_uri_string().'/'.$uri;
        }
        else {
            
            $uri = $this->modul_uri_string().'/'.$uri;
        }
                
        return $this->config->site_url($uri);
    }
    
    
    /**
     * Вернуть путь до текущего модуля
     * @return string
     */
    public function modul_uri_string() {
        
        return '/'.implode('/', $this->modul_segments_array());
    }
    
    
    /**
     * Вернуть путь после текущего модуля
     * @return string
     */
    public function other_uri_string() {
        
        return '/'.implode('/', $this->other_segments_array());
    }
    
    
    /**
     * Вернуть значение текущего сегмента
     * @return string
     */
    public function current_uri() {
        
        return $this->current;
    }
    
    
    public function current_position() {
        
        return count($this->modul_segments_array());
    }
}